#!/bin/sh
### filename: dmenu_run
### 功能：基础版 dmenu 启动器，无参数，执行命令后立即发送通知（15秒超时）

# 核心功能：仅保留最基础的 dmenu 启动和通知逻辑
# 无需参数，直接运行即可

# 1. 通过 dmenu_path 获取程序列表，显示 dmenu 供选择
selected_cmd=$(dmenu_path | dmenu -i -p "启动应用：")
[ -z "$selected_cmd" ] && exit 0  # 用户取消选择则退出

# 2. 立即发送通知告知命令已开始执行（15秒超时）
notify-send -u low -i "system-run" \
    "▶️ 正在执行" \
    "命令: $selected_cmd\n（15秒后关闭）" \
    --expire-time=15000 &

# 3. 后台执行命令并捕获结果，完成后发送结果通知（15秒超时）
{
    # 捕获命令输出（标准输出+错误输出）和退出码
    cmd_output=$(mktemp)
    /bin/sh -c "$selected_cmd" > "$cmd_output" 2>&1
    exit_code=$?

    # 截取前3行输出（避免通知过长）
    short_output=$(head -n 3 "$cmd_output" | tr '\n' '; ' | sed 's/; $//')
    rm -f "$cmd_output"  # 清理临时文件

    # 发送结果通知（15秒后自动关闭）
    if [ $exit_code -eq 0 ]; then
        notify-send -u normal -i "dialog-information" \
            "✅ 执行成功" \
            "命令: $selected_cmd\n输出: ${short_output:-"无输出"}\n（15秒后关闭）" \
            --expire-time=15000
    else
        notify-send -u critical -i "dialog-error" \
            "❌ 执行失败" \
            "命令: $selected_cmd\n错误码: $exit_code\n错误: ${short_output:-"无信息"}\n（15秒后关闭）" \
            --expire-time=15000
    fi
} &
